package br.com.canvasForAll.model.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "COMENTARIO")
@NamedQueries(value = {
		@NamedQuery(name = "Comentario.pesquisa", query = "SELECT c FROM Comentario c"),
		@NamedQuery(name = "Comentario.duplicata", query = "SELECT COUNT(c) FROM Comentario c WHERE c.id = :id")
})
public class Comentario implements Serializable {

	private static final long serialVersionUID = -1623710147488055562L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID_COMENTARIO", unique = true, nullable = false)
	private Long id;
	
	@Column(name = "DESCRICAO_COMENTARIO", nullable = false, columnDefinition="LONGTEXT")
	private String descricao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_CRIACAO", nullable = false)
	private Date dataCriacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_ATUALIZACAO", nullable = false)
	private Date dataUltimaAtualizacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_SINCRONIZACAO", nullable = true)
	private Date dataUltimaSincronizacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_NOTIFICACAO", nullable = true)
	private Date dataUltimaNotificacao;
	
	@Column(name = "FLAG_LOCAL_CRIACAO", length = 1, columnDefinition = "CHAR")
	private String localCriacao;
	
	@Column(name = "FLAG_NOTIFICAR", length = 1, columnDefinition = "CHAR")
	private String notificar;
	
	@ManyToOne(cascade = CascadeType.MERGE, targetEntity = Postit.class, optional = false, fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_POSTIT", referencedColumnName = "ID_POSTIT")
	private Postit postit;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_PERFIL", nullable = false)
	private Perfil perfil;
	
	public Comentario(){
		this.localCriacao = "M";
		this.notificar = "S";
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public Date getDataUltimaAtualizacao() {
		return dataUltimaAtualizacao;
	}

	public void setDataUltimaAtualizacao(Date dataUltimaAtualizacao) {
		this.dataUltimaAtualizacao = dataUltimaAtualizacao;
	}

	public Date getDataUltimaSincronizacao() {
		return dataUltimaSincronizacao;
	}

	public void setDataUltimaSincronizacao(Date dataUltimaSincronizacao) {
		this.dataUltimaSincronizacao = dataUltimaSincronizacao;
	}

	public Date getDataUltimaNotificacao() {
		return dataUltimaNotificacao;
	}

	public void setDataUltimaNotificacao(Date dataUltimaNotificacao) {
		this.dataUltimaNotificacao = dataUltimaNotificacao;
	}

	public String getLocalCriacao() {
		return localCriacao;
	}

	public void setLocalCriacao(String localCriacao) {
		this.localCriacao = localCriacao;
	}

	public String getNotificar() {
		return notificar;
	}

	public void setNotificar(String notificar) {
		this.notificar = notificar;
	}

	public Postit getPostit() {
		return postit;
	}

	public void setPostit(Postit postit) {
		this.postit = postit;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

}
